<!DOCTYPE html>
<html>
<head><meta name="generator" content="Hexo 3.8.0">
  <meta charset="utf-8">
  

  
  <title>SNMP 协议 | 章军的博客</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <meta name="description" content="写在前面：接触 SNMP 协议相关的告警已经有些年头了，一直没有搞清楚 SNMP 消息有哪些？实现原理是什么？如果你也在研究，请不吝赐教！    SNMP 介绍">
<meta name="keywords" content="SNMP">
<meta property="og:type" content="article">
<meta property="og:title" content="SNMP 协议">
<meta property="og:url" content="http://octopuscloud.top/2019/03/02/SNMP-解析/index.html">
<meta property="og:site_name" content="章军的博客">
<meta property="og:description" content="写在前面：接触 SNMP 协议相关的告警已经有些年头了，一直没有搞清楚 SNMP 消息有哪些？实现原理是什么？如果你也在研究，请不吝赐教！    SNMP 介绍">
<meta property="og:locale" content="China">
<meta property="og:image" content="http://upload-images.jianshu.io/upload_images/7749898-dd3ed6d8276a7a58.gif">
<meta property="og:image" content="http://upload-images.jianshu.io/upload_images/7749898-3eed36007953bbc6.gif">
<meta property="og:image" content="http://upload-images.jianshu.io/upload_images/7749898-db101dc57f3ac74a.png">
<meta property="og:image" content="http://upload-images.jianshu.io/upload_images/7749898-926490a594c732d4.png">
<meta property="og:image" content="http://upload-images.jianshu.io/upload_images/7749898-739a11dfede6d6d8.jpeg">
<meta property="og:image" content="http://upload-images.jianshu.io/upload_images/7749898-1f0950fc9bf2b050.png">
<meta property="og:image" content="http://upload-images.jianshu.io/upload_images/7749898-138438379f6e2f40.jpg">
<meta property="og:image" content="http://upload-images.jianshu.io/upload_images/7749898-a4527908bb01a371.gif">
<meta property="og:image" content="http://upload-images.jianshu.io/upload_images/7749898-ba41af57e0fd6699.gif">
<meta property="og:image" content="http://upload-images.jianshu.io/upload_images/7749898-7991c40b2b2f340f.gif">
<meta property="og:updated_time" content="2019-09-11T04:27:11.476Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="SNMP 协议">
<meta name="twitter:description" content="写在前面：接触 SNMP 协议相关的告警已经有些年头了，一直没有搞清楚 SNMP 消息有哪些？实现原理是什么？如果你也在研究，请不吝赐教！    SNMP 介绍">
<meta name="twitter:image" content="http://upload-images.jianshu.io/upload_images/7749898-dd3ed6d8276a7a58.gif">
  
    <link rel="alternate" href="/atom.xml" title="章军的博客" type="application/atom+xml">
  
  
    <link rel="icon" href="/favicon.png">
  
  
    <link href="//fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet" type="text/css">
  
  <link rel="stylesheet" href="/css/style.css">
</head>
</html>
<body>
  <div id="container">
    <div id="wrap">
      <header id="header">
  <div id="banner"></div>
  <div id="header-outer" class="outer">
    <div id="header-title" class="inner">
      <h1 id="logo-wrap">
        <a href="/" id="logo">章军的博客</a>
      </h1>
      
    </div>
    <div id="header-inner" class="inner">
      <nav id="main-nav">
        <a id="main-nav-toggle" class="nav-icon"></a>
        
          <a class="main-nav-link" href="/">Home</a>
        
          <a class="main-nav-link" href="/archives">Archives</a>
        
      </nav>
      <nav id="sub-nav">
        
          <a id="nav-rss-link" class="nav-icon" href="/atom.xml" title="RSS Feed"></a>
        
        <a id="nav-search-btn" class="nav-icon" title="Search"></a>
      </nav>
      <div id="search-form-wrap">
        <form action="//google.com/search" method="get" accept-charset="UTF-8" class="search-form"><input type="search" name="q" class="search-form-input" placeholder="Search"><button type="submit" class="search-form-submit">&#xF002;</button><input type="hidden" name="sitesearch" value="http://octopuscloud.top"></form>
      </div>
    </div>
  </div>
</header>
      <div class="outer">
        <section id="main"><article id="post-SNMP-解析" class="article article-type-post" itemscope itemprop="blogPost">
  <div class="article-meta">
    <a href="/2019/03/02/SNMP-解析/" class="article-date">
  <time datetime="2019-03-02T10:20:44.000Z" itemprop="datePublished">2019-03-02</time>
</a>
    
  <div class="article-category">
    <a class="article-category-link" href="/categories/RFC-protocol/">RFC protocol</a>
  </div>

  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 class="article-title" itemprop="name">
      SNMP 协议
    </h1>
  

      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
        <p>写在前面：接触 SNMP 协议相关的告警已经有些年头了，一直没有搞清楚 SNMP 消息有哪些？实现原理是什么？如果你也在研究，请不吝赐教！  </p>
<blockquote>
<p><strong>SNMP 介绍</strong></p>
</blockquote>
<a id="more"></a>
<p>SNMP(simple network management protocol) 是因特网架构委员会 IAB 定义的一个应用层协议。SNMP 广泛用于管理和监控网络设备，大多数专业的网络设备都有 SNMP agent 代理，这些代理被激活和配置后用于和 SNMP 管理 NMS(network management system) 网络管理系统通信。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/7749898-dd3ed6d8276a7a58.gif" alt> SNMP 代理和 SNMP 管理</p>
<p>SNMP 作为 TCP/IP 协议一部分，SNMP 消息被封装为 UDP(user datagram protocol) 并在 IP 协议中封装和传输，传输过程如下：</p>
<p><img src="http://upload-images.jianshu.io/upload_images/7749898-3eed36007953bbc6.gif" alt> SNMP 消息传输过程</p>
<p>UDP 协议是无连接的传输协议。</p>
<p>注意：如果抓包分析 SNMP 消息内容，需要在 Wireshark 中将 SNMP 消息转换为 UDP 消息。</p>
<p>SNMP 共有 3 个版本: v1，v2 和 v3。v1，v2 有很多共同的特征，v3 在先前的版本基础上增加了安全和远程配置能力 。为了解决不同版本的兼容性问题，RFC3584 定义了共存策略。</p>
<blockquote>
<p><strong>SNMP 架构</strong></p>
</blockquote>
<p>SNMP 协议采用 C/S 架构，定义了三种角色：SNMP 管理，SNMP 代理 agent 和代理 proxy 服务器。SNMP 管理作为客户端，agent 和 proxy 作为服务端。</p>
<p><strong>SNMP 管理</strong>用于 get 查询下级 agent 或 proxy 的消息，set 设置 agent 或 proxy 参数和接收 trap 上报的消息。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/7749898-db101dc57f3ac74a.png" alt> SNMP 架构之 SNMP 三个角色</p>
<p><strong>SNMP agent</strong> 用于接收 SNMP 管理的请求并去网络设备上查询所需数据后做出合适响应和 trap 上报网络设备上新产生的告警等消息给对应的 SNMP 管理。</p>
<p><strong>SNMP proxy</strong> 用于不能直接使用 SNMP 协议场景，如异构网络 (非 IP 网络) 或者不同版本 SNMP 代理的网络设备。Proxy 做了异种网络或不同版本代理和相应 SNMP 数据请求的转换工作。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/7749898-926490a594c732d4.png" alt> SNMP proxy 场景</p>
<p><strong>问题反思：</strong></p>
<ol>
<li><p>SNMP 管理用于 get 查询下级 agent 或 proxy 的消息，如果查到的信息已经存在尚未恢复，SNMP 管理是如何判重的呢？</p>
</li>
<li><p>在网络设备上有新产生的告警等消息，SNMP agent 就 trap 上报消息给对应的 SNMP 管理，历史消息不会重复上报的，有自己是否上报的判断机制，但是如果 trap 上报失败如何处理呢？</p>
</li>
</ol>
<p>一套完整的 SNMP 系统主要包括管理信息库（MIB）、管理信息结构（SMI）及 SNMP 报文协议。  </p>
<p>1）管理信息库 MIB—SNMP 管理和 Agent 的沟通桥梁：MIB 是资源和对象标识符 oid（object identifier）之间唯一对应关系的数据库。任何一个被管理的资源都可以用 oid 来对应。每个 SNMP 设备（Agent）都有自己的 MIB，SNMP agent 必须查询 MIB 库，才能识别 SNMP 管理的请求。</p>
<p>iso.org.dod.internet.mgmt.mib.ip.ipInReceives 对应的数字表示为：1.3.6.1.2.1.4.3。比如，设置或获取系统正确运行时间的 oid 为 1.3.6.1.2.1.1.3，更多请查看 <a href="https://link.jianshu.com?t=http%3A%2F%2Fwww.cnblogs.com%2Faspx-net%2Fp%2F3554044.html" target="_blank" rel="noopener">SNMP oid 列表</a>。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/7749898-739a11dfede6d6d8.jpeg" alt> Oid 树</p>
<p>2) SMI: 管理信息结构。主要作用是：（1）定义了对象命名的规则；（2）定义了类型规则。（3）定义了编码方法。  </p>
<blockquote>
<p><strong>SNMP 请求和响应</strong></p>
</blockquote>
<p>SNMP 的请求和响应是基于 UDP 协议的异步消息，不需要等待响应。</p>
<p>1）  Get-request 操作：SNMP 管理从 SNMP Agent 提取一个或多个参数值。  </p>
<p>2）  Get-next-request 操作：SNMP 管理从 SNMP Agent 提取一个或多个参数的下一个参数值。</p>
<p>3）  Get-bulk 操作：SNMP 管理从 Agent 提取批量的参数值；</p>
<p>4)  inform-request 操作: 允许一个 SNMP 管理 a 发送 inform 消息给其他的 SNMP 管理 b，SNMP 管理 b 再响应 ackknowledgement 给 SNMP 管理 a。后来并没有局限于 SNMP 管理，SNMP agent 也可以发送 inform 消息，比 trap 又多了一层确认收到消息的保护机制。否则没有收到可以再发送 trap 消息。</p>
<p>5）  Set-request 操作：SNMP 管理设置 SNMP Agent 的一个或多个参数值。节点有可写属性</p>
<p>6）  Get-response 操作：SNMP Agent 返回的一个或多个参数值，是 SNMP Agent 对 SNMP 管理前面 4 个操作的响应。</p>
<p>7）  Trap 操作：SNMP Agent 主动发出的报文，通知 SNMP 管理所发生的事情。</p>
<p>SNMPv1 ：在 RFC1157 中定义，包含 5 个请求 / 响应: 1)，2)，5)，6)，7)。  </p>
<p>SNMPv2 ：V2 其中一个变种 V2C 是基于共同体（Community），在 RFC1901 中定义的一个实验性协议。包含 7 个请求 / 响应: 1)，2)，3)，4)，5)，6)，7)。  </p>
<p>SNMPv3 ：基于安全 (security)，包含 7 个请求 / 响应: 1)，2)，3)，4)，5)，6)，7)。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/7749898-1f0950fc9bf2b050.png" alt> SNMP 对比</p>
<p>V2 的 Get，GetNext 和 Set 操作相同于 v1 的，此外 V2 还加强了一些协议操作，如果 get-request 需要多个请求参数，如果有一个不存在，请求会被正常执行，但在 v1 中会响应一个错误消息。v1 版本在 trap 消息和其他 get/set 操作消息的 PDU 不同，v2 版本简化了 trap 消息，使 get/set/trap 消息的 pdu 相同。</p>
<blockquote>
<p><strong>SNMP 查询上报通知流程</strong></p>
</blockquote>
<p>SNMP 管理查询的 SNMP agent 的端口是 161，接收 SNMP agent 上报或通知的 SNMP 管理的端口上 162，SNMP 管理和 agent 之间的通讯过程如下:</p>
<p><img src="http://upload-images.jianshu.io/upload_images/7749898-138438379f6e2f40.jpg" alt> SNMP 管理和 agent 通信过程</p>
<p>SNMP 管理的查询和设置流程，结合 SNMP 请求和响应：a. 1) 或 2) 或 3) 或 5) 请求资源场景，通过资源在 mib 找到 oid，分别组装 UDP 协议报文传输给 SNMP agent。b. agent 根据请求中的 oid 去 mib 中找到对应的资源：如果 oid 是查询某个消息 (含批量的)，然后去设备上查找资源信息；如果 oid 是设置 agent 的参数，则设置 agent 参数。c. SNMP agent 查询到数据或设置参数成功则做出响应 6)，组装 UDP 协议返回给 SNMP 管理。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/7749898-a4527908bb01a371.gif" alt> SNMP 管理查询 / 设置流程</p>
<p>SNMP agent 上报流程，结合 SNMP 请求和响应：a. SNMP agent 检测到设备上有资源消息产生，根据资源消息，到 mib 中找到对应 oid，通过 7)trap 上报，封装为 UDP 协议消息上报给 SNMP 管理。b. SNMP 管理收到上报信息后查询和 agent 一样的 mib 库，通过 oid 找到资源消息。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/7749898-ba41af57e0fd6699.gif" alt> SNMP 上报流程</p>
<p>SNMP inform 流程，结合 SNMP 请求和响应：a. SNMP agent 检测到设备上有资源消息产生，根据资源消息，到 mib 中找到对应 oid，通过 4)inform 上报，封装为 UDP 协议消息上报给 SNMP 管理。b. SNMP 管理收到上报信息后查询和 agent 一样的 mib 库，通过 oid 找到资源消息，然后响应给 SNMP agent 消息 acknowledgement 以确认收到消息，否则可以再次发送 inform 消息。这是比 trap 实现相比的优势。SNMP 管理之间发送 inform 消息也是相同的流程。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/7749898-7991c40b2b2f340f.gif" alt> SNMP 通知流程</p>
<p>参考资料：<br><a href="https://link.jianshu.com?t=https%3A%2F%2Fwww.manageengine.com%2Fnetwork-monitoring%2Fwhat-is-snmp.html" target="_blank" rel="noopener">SNMP tutorial 教程</a></p>
<p><a href="https://link.jianshu.com?t=http%3A%2F%2Fblog.51cto.com%2Ffreeloda%2F1306743" target="_blank" rel="noopener">SNMP 原理</a></p>
<p><a href="https://link.jianshu.com?t=https%3A%2F%2Fen.m.wikipedia.org%2Fwiki%2FSimple_Network_Management_Protocol%3Ffrom" target="_blank" rel="noopener">SNMP wikipedia</a></p>
<p>转载于 <a href="https://www.jianshu.com/p/6a9e83aa41c0" target="_blank" rel="noopener">robot_test_boy</a></p>
<h3 id="一帧-SNMP-数据的请求数据帧的解析"><a href="#一帧-SNMP-数据的请求数据帧的解析" class="headerlink" title="一帧 SNMP 数据的请求数据帧的解析"></a>一帧 SNMP 数据的请求数据帧的解析</h3><pre><code>snmp 请求的帧数据如下:

0000   00 01 02 03 04 05 1c 1b 0d 5b 98 9b 08 00 45 00   .........[....E.
0010   00 4b 4a 93 00 00 40 11 00 00 c0 a8 0a cc c0 a8   .KJ...@...À¨.ÌÀ¨
0020   0a 42 c4 eb 00 a1 00 37 96 a7 30 2d 02 01 01 04   .BÄë.¡.7.§0-....
0030   06 50 55 42 4c 49 43 a0 20 02 02 1d 69 02 01 00   .PUBLIC  ...i...
0040   02 01 00 30 14 30 12 06 0e 2b 06 01 04 01 81 e1   ...0.0...+.....á
0050   42 02 16 12 01 03 00 05 00                        B........

Ethernet II 报文格式:

0000   00 01 02 03 04 05 1c 1b 0d 5b 98 9b 08 00         .........[....E.

| D-MAC | S-MAC | Type |    Data   | CRC |
| 6-B   | 6-B   | 2-B  |  43~1497  |     |

D-MAC(Desination MAC): 00 01 02 03 04 05 , 0x00 ~ 0x05 。
S-MAC(Source MAC):     1c 1b 0d 5d 98 9b , 0x06 ~ 0x0b 。
Type: 帧类型,  08 00 0x0c ~ 0x0d (0x0800 代表 IP 帧) .
Data: 数据域，IP 报文格式在此域中 。


IP 报文是　Ethernet II 的一种，其中的 Type 为　0x0800 。IP 报文包含于 Data 中　。

0000                                             45 00   .........[....E.
0010   00 4b 4a 93 00 00 40 11 00 00 c0 a8 0a cc c0 a8   .KJ...@...À¨.ÌÀ¨
0020   0a 42                                             .BÄë.¡.7.§0-....

UDP 报文格式(for head)

| ver&amp;len | diff server | T-len | ID  | Flag | TTL | protocol | Head Checksum | S-IP | D-IP | Data |
| 1-B     | 1-B         | 2-B   | 2-B | 2-B  | 1-B | 1-B      | 2-B           | 6-B  | 6-B  |      |

Ver&amp;len : 前面 4bit 表示version , 后面 4bit 表示头部长度 。
differe service: 区分服务
T-len: ip报文的总长度，包含报文头和报文数据段。
ID: 唯一标示主机发送的分数据包 。通常每发送一段数据加一 。
flag: R, DF, MF 三位。目前只有后两位有效，DF 表示不分片 ，MF为1 表示&quot;跟多的片&quot;，为0表示这是
      最后一段。
TTL: 存活时间 。
protocol: TCP为6，UDP为17，ICMP 为1， IGMP 为2.
head check sum: 首部校验和。
S-IP: 源 IP .
D-IP: 目标 IP.

UDP 报文格式 (for data)

0020         c4 eb 00 a1 00 37 96 a7                     .BÄë.¡.7.§0-....

| S-Port | D-Port | Length | Check Sum | SNMP Filed |
| 2-B    | 2-B    | 2-B    | 2-B       |            |

S-Port: source port
D-Port: destination port
Lenght: the length of UDP data
check sum : udp check sum
SNMP filed: snmp 的数据域

snmp 包含于 UDP 数据段

0020                                 30 2d 02 01 01 04   .BÄë.¡.7.§0-....
0030   06 50 55 42 4c 49 43 a0 20 02 02 1d 69 02 01 00   .PUBLIC  ...i...
0040   02 01 00 30 14 30 12 06 0e 2b 06 01 04 01 81 e1   ...0.0...+.....á
0050   42 02 16 12 01 03 00 05 00                        B........

30 - 表示 snmp 报文
2d - 消息长度为 0x2d
02 01 - 表示 INTEGER 类型 
| version | Type | commumtily len | communtiy | snmp data |
| 1-B     | 1-B  | 1-B            |           |           |

version: snmp 的版本，从 0　开始计数 
Type: 参数类型
communtiy len : communtiy 的长度
communtiy: 共同体，这个需要和Agent上的communtuiy 相同 
Lenght: snmp 长度

snmp request data

| type | len | Request Id | error status | error index | seq length | var len | 

SNMP Get Next 请求的回复决定的，下一次的 Get Next 请求的 OID 号.
</code></pre><hr>

      
    </div>
    <footer class="article-footer">
      <a data-url="http://octopuscloud.top/2019/03/02/SNMP-解析/" data-id="ck471vq0u000t32fzxwqf1xkw" class="article-share-link">Share</a>
      
      
  <ul class="article-tag-list"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/SNMP/">SNMP</a></li></ul>

    </footer>
  </div>
  
    
<nav id="article-nav">
  
    <a href="/2019/03/02/vim-配置/" id="article-nav-newer" class="article-nav-link-wrap">
      <strong class="article-nav-caption">Newer</strong>
      <div class="article-nav-title">
        
          vim 配置
        
      </div>
    </a>
  
  
    <a href="/2019/03/02/ssh-key/" id="article-nav-older" class="article-nav-link-wrap">
      <strong class="article-nav-caption">Older</strong>
      <div class="article-nav-title">ssh key</div>
    </a>
  
</nav>

  
</article>

</section>
        
          <aside id="sidebar">
  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Categories</h3>
    <div class="widget">
      <ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/RFC/">RFC</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/RFC-protocol/">RFC protocol</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/ReadNote/">ReadNote</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/linux/">linux</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/protocols/">protocols</a></li><li class="category-list-item"><a class="category-list-link" href="/categories/tools/">tools</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Tags</h3>
    <div class="widget">
      <ul class="tag-list"><li class="tag-list-item"><a class="tag-list-link" href="/tags/C/">C</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Data-Struct/">Data Struct</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Ethernet-II/">Ethernet II</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Frame-Format/">Frame Format</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/I2C/">I2C</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/IPv6/">IPv6</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Neighbour-Discover-Protocol/">Neighbour Discover Protocol</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/RFC/">RFC</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/SNMP/">SNMP</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/arthmetic/">arthmetic</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/cgdb/">cgdb</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/chapter-15/">chapter 15</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/data-struct/">data struct</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/deb/">deb</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/defalt-path-for-so-file/">defalt path for so file</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/editer/">editer</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/file-system/">file system</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/gdb-debug/">gdb debug</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/hash/">hash</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/linux/">linux</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/linux-driver/">linux driver</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/platform-bus/">platform bus</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/pointer-array/">pointer, array</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/pseudocode/">pseudocode</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/rb-tree/">rb tree</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/sort/">sort</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/ssh-key/">ssh key</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/symbol/">symbol</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/tool/">tool</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/tools/">tools</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/图/">图</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/通信协议/">通信协议</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Tag Cloud</h3>
    <div class="widget tagcloud">
      <a href="/tags/C/" style="font-size: 10px;">C</a> <a href="/tags/Data-Struct/" style="font-size: 10px;">Data Struct</a> <a href="/tags/Ethernet-II/" style="font-size: 10px;">Ethernet II</a> <a href="/tags/Frame-Format/" style="font-size: 10px;">Frame Format</a> <a href="/tags/I2C/" style="font-size: 10px;">I2C</a> <a href="/tags/IPv6/" style="font-size: 15px;">IPv6</a> <a href="/tags/Neighbour-Discover-Protocol/" style="font-size: 10px;">Neighbour Discover Protocol</a> <a href="/tags/RFC/" style="font-size: 10px;">RFC</a> <a href="/tags/SNMP/" style="font-size: 10px;">SNMP</a> <a href="/tags/arthmetic/" style="font-size: 10px;">arthmetic</a> <a href="/tags/cgdb/" style="font-size: 10px;">cgdb</a> <a href="/tags/chapter-15/" style="font-size: 10px;">chapter 15</a> <a href="/tags/data-struct/" style="font-size: 15px;">data struct</a> <a href="/tags/deb/" style="font-size: 10px;">deb</a> <a href="/tags/defalt-path-for-so-file/" style="font-size: 10px;">defalt path for so file</a> <a href="/tags/editer/" style="font-size: 10px;">editer</a> <a href="/tags/file-system/" style="font-size: 10px;">file system</a> <a href="/tags/gdb-debug/" style="font-size: 10px;">gdb debug</a> <a href="/tags/hash/" style="font-size: 10px;">hash</a> <a href="/tags/linux/" style="font-size: 20px;">linux</a> <a href="/tags/linux-driver/" style="font-size: 10px;">linux driver</a> <a href="/tags/platform-bus/" style="font-size: 10px;">platform bus</a> <a href="/tags/pointer-array/" style="font-size: 10px;">pointer, array</a> <a href="/tags/pseudocode/" style="font-size: 10px;">pseudocode</a> <a href="/tags/rb-tree/" style="font-size: 10px;">rb tree</a> <a href="/tags/sort/" style="font-size: 20px;">sort</a> <a href="/tags/ssh-key/" style="font-size: 10px;">ssh key</a> <a href="/tags/symbol/" style="font-size: 10px;">symbol</a> <a href="/tags/tool/" style="font-size: 10px;">tool</a> <a href="/tags/tools/" style="font-size: 10px;">tools</a> <a href="/tags/图/" style="font-size: 10px;">图</a> <a href="/tags/通信协议/" style="font-size: 10px;">通信协议</a>
    </div>
  </div>

  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Archives</h3>
    <div class="widget">
      <ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/archives/2019/12/">December 2019</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2019/11/">November 2019</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2019/10/">October 2019</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2019/09/">September 2019</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2019/08/">August 2019</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2019/07/">July 2019</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2019/06/">June 2019</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2019/05/">May 2019</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2019/04/">April 2019</a></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2019/03/">March 2019</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Recent Posts</h3>
    <div class="widget">
      <ul>
        
          <li>
            <a href="/2019/12/15/TMUX-使用/">TMUX-使用</a>
          </li>
        
          <li>
            <a href="/2019/11/02/linux-platform-bus-总线分析/platform/">(no title)</a>
          </li>
        
          <li>
            <a href="/2019/11/02/十二章-二叉搜索树/">算法导论-第十二章 二叉查找树</a>
          </li>
        
          <li>
            <a href="/2019/11/02/SegmentationFault-Debug/">(no title)</a>
          </li>
        
          <li>
            <a href="/2019/10/19/linux-platform-bus-总线分析/">linux platform bus 总线分析</a>
          </li>
        
      </ul>
    </div>
  </div>

  
</aside>
        
      </div>
      <footer id="footer">
  
  <div class="outer">
    <div id="footer-info" class="inner">
      &copy; 2019 zhangjun<br>
      Powered by <a href="http://hexo.io/" target="_blank">Hexo</a>
    </div>
  </div>
</footer>
    </div>
    <nav id="mobile-nav">
  
    <a href="/" class="mobile-nav-link">Home</a>
  
    <a href="/archives" class="mobile-nav-link">Archives</a>
  
</nav>
    

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>


  <link rel="stylesheet" href="/fancybox/jquery.fancybox.css">
  <script src="/fancybox/jquery.fancybox.pack.js"></script>


<script src="/js/script.js"></script>



  </div>
</body>
</html>